package org.l.qiao.base;

import org.l.qiao.annotation.Key;

/**
 * Created by 严秋旺 on 2015/6/14.
 */
public interface LType {
    /**
     * 字符串型<br />
     * 默认：null
     */
    int LTYPE_STRING = 0;
    /**
     * 字节型<br />
     * 大小：8bit<br />
     * 范围：-128 - 127<br />
     * 默认值：0
     */
    int LTYPE_BYTE = 1;
    /**
     * 短整型<br />
     * 大小：16bit<br />
     * 范围：-32768 - 32768<br />
     * 默认值：0
     */
    int LTYPE_SHORT = 2;
    /**
     * 整型<br />
     * 大小：32bit<br />
     * 范围：-2147483648-2147483648<br />
     * 默认值：0
     */
    int LTYPE_INTEGER = 3;
    /**
     * 长整型<br />
     * 大小：64bit<br />
     * 范围：-9233372036854477808-9233372036854477808<br />
     * 默认值：0
     */
    int LTYPE_LONG = 4;
    /**
     * 字符型<br />
     * 大小：16bit<br />
     * 范围：\u0000 - \uffff <br />
     * 默认值：\u0000
     */
    int LTYPE_CHAR = 5;
    /**
     * 浮点型<br />
     * 大小：32bit<br />
     * 范围：-3.40292347E+38-3.40292347E+38<br />
     * 默认值：0.0f
     */
    int LTYPE_FLOAT = 6;
    /**
     * 双精度<br />
     * 大小：64bit<br />
     * 范围：-1.79769313486231570E+308-1.79769313486231570E+308<br />
     * 默认值：0.0d
     */
    int LTYPE_DOUBLE = 7;
    /**
     * 布尔型<br />
     * 大小：1bit<br />
     * 范围：true/false<br />
     * 默认值：false
     */
    int LTYPE_BOOLEAN = 8;
    /**
     * 日期型<br />
     * 默认值：null
     */
    int LTYPE_DATE = 9;

    /**
     * ObjectId型<br />
     * 默认值：null
     */
    int LTYPE_OBJECTID = 10;

    /**
     * 获取类型码
     *
     * @return 相应获取类型码
     */
    int getLType();

    /**
     * 将String形式值得还原为对象值
     *
     * @param key   注解key
     * @param value 字符串形式值
     * @return 对象形式值
     */
    Object parse(Key key, String value);

    /**
     * 将String形式值得还原为对象值
     *
     * @param value 字符串形式值
     * @return 对象形式值
     */
    Object parse(String value);

    /**
     * 将对象形式值转换为字符串形式值
     *
     * @param object 待转换对象
     * @return 字符串形式值
     */
    String toString(Object object);

}
